/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.uca.dss.curso2011.grupo5.gestionAsientos;

import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.query.Predicate;
import java.util.List;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.uca.dss.curso2011.grupo5.Args;
import org.uca.dss.curso2011.grupo5.DBUtils;
import org.uca.dss.curso2011.grupo5.interfazExtendido.InformacionTrayecto;
import org.uca.dss.curso2011.grupo5.interfazExtendido.ReservaTrayecto;

/**
 *
 * @author Luis
 */
public class IncrementarAsientos implements GestionAsientos
{

    public int apply(final InformacionTrayecto iT, final LocalDate fecha)  throws IllegalArgumentException
    {
        Args.comprobarNulo(iT);
        Args.comprobarNulo(fecha);
        
        // Ver el número de reservas del trayecto
        ObjectContainer db = DBUtils.getDb();

        ObjectSet<ReservaTrayecto> reservas = db.query(new Predicate<ReservaTrayecto>() {
            @Override
            public boolean match(ReservaTrayecto et) {
                return et.getTrayecto().getOrigen().equals(iT.getOrigen()) &&
                       et.getTrayecto().getDestino().equals(iT.getDestino()) &&
                       et.getFechaSalida().isEqual(fecha) && et.getTrayecto().getHoraSalida().isEqual(iT.getHoraSalida());
            }

        });
        
        // Asignar el siguiente valor
        return reservas.size()+1;
    }

    public GestionAsientos clone() throws CloneNotSupportedException {
        return (GestionAsientos) super.clone();
    }
}
